﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
using System.Data;

namespace BMG.WS
{
    [ServiceContract]
    public interface IBMGCatalogue
    {
        /// <summary>
        /// Renvoie la liste des catégories
        /// </summary>
        /// <param name="aWithNoChoice">Permet de pouvoir choisir aucune catégorie (true) ou oblige à en choisir une (false)</param>
        /// <returns>Liste générique de catégories</returns>
        [OperationContract]
        List<categorie> GetCategorieList(bool aWithNoChoice);
        
        /// <summary>
        /// Renvoie la liste des produits sur base de la description mentionnée
        /// </summary>
        /// <param name="aDescriptionNom">Texte recherché dans l'intitulé et la description</param>
        /// <returns>Liste générique de produits</returns>
        [OperationContract]
        List<produit> GetProduitList(String aDescriptionNom);
        
        /// <summary>
        /// Renvoie la liste des produits sur base de la description mentionnée au sein de la catégorie précisée
        /// </summary>
        /// <param name="aDescriptionNom">Texte recherché dans l'intitulé et la description</param>
        /// <param name="aID_CAT">Identifiant de la catégorie à laquelle doit appartenir le produit</param>
        /// <returns>Liste générique de produits</returns>
        [OperationContract]
        List<produit> GetProduitListDansCategorie(String aDescriptionNom, int aID_CAT);

        /// <summary>
        /// Renvoie le produit sur base de l'identifiant mentionné
        /// </summary>
        /// <param name="aID_PRO">Identifiant du produit</param>
        /// <returns>un produit</returns>
        [OperationContract]
        produit GetProduit(int aID_PRO);
        
    }
    
    /// <summary>
    /// Spécifications de ce qui caractérise un produit dans le cadre du web service.
    /// </summary>
    [DataContract]
    public class produit
    {
        int id;
        string intitule;
        string description;
        decimal prix;
        int quantite;
        int idcat;

        public produit(int idval, string intituleval, string descriptionval, decimal prixval, int quantiteval, int idcatval)
        {
            this.id = idval;
            this.intitule = intituleval;
            this.description = descriptionval;
            this.prix = prixval;
            this.quantite = quantiteval;
            this.idcat = idcatval;
        }


        [DataMember]
        public int ID
        {
            get { return id; }
            set { id = value; }
        }

        [DataMember]
        public string INTITULE
        {
            get { return intitule; }
            set { intitule = value; }
        }

        [DataMember]
        public string DESCRIPTION
        {
            get { return description; }
            set { description = value; }
        }

        [DataMember]
        public decimal PRIX
        {
            get { return prix; }
            set { prix = value; }
        }

        [DataMember]
        public int QUANTITE
        {
            get { return quantite; }
            set { quantite = value; }
        }

        [DataMember]
        public int IDCAT
        {
            get { return idcat; }
            set { idcat = value; }
        }
    }
    
    /// <summary>
    /// Spécifications de ce qui caractérise une catégorie dans le cadre du web service
    /// </summary>
    [DataContract]
    public class categorie
    {
        int id;
        string intitule;
        string description;
        int pid;

        public categorie(int idval, string intituleval, string descriptionval, int pidval)
        {
            this.id = idval;
            this.intitule = intituleval;
            this.description = descriptionval;
            this.pid = pidval;
        }


        [DataMember]
        public int ID
        {
            get { return id; }
            set { id = value; }
        }

        [DataMember]
        public string INTITULE
        {
            get { return intitule; }
            set { intitule = value; }
        }

        [DataMember]
        public string DESCRIPTION
        {
            get { return description; }
            set { description = value; }
        }
        
        [DataMember]
        public int PID
        {
            get { return pid; }
            set { pid = value; }
        }
        
    }
}
